package puertos;

import gnu.io.CommPortIdentifier;
import gnu.io.ParallelPort;
import gnu.io.PortInUseException;
import interfaz.TraccionForm;
import interfaz.Principal;
import java.io.IOException;
import java.io.OutputStream;
import java.util.Enumeration;
import java.util.HashMap;

public class Paralelo {
    //for containing the ports that will be found

    private Enumeration ports = null;
    //map the port names to CommPortIdentifiers
    private HashMap portMap = new HashMap();
    //this is the object that contains the opened port   
    private CommPortIdentifier selectedPortIdentifier;
    private ParallelPort parallelPort;
    private OutputStream output;
    private String nombre;
    //passed from main GUI
    Principal window = null;
    public static int paralelo = 0;

    public Paralelo(Principal window) {
        this.window = window;
    }

    public void searchForPorts() {
        ports = CommPortIdentifier.getPortIdentifiers();

        while (ports.hasMoreElements()) {
            CommPortIdentifier curPort = (CommPortIdentifier) ports.nextElement();

            //get only serial ports
            if (curPort.getPortType() == CommPortIdentifier.PORT_PARALLEL) {
               window.ensayo.cboxPorts1.addItem(curPort.getName());
                window.alambre.cboxPorts1.addItem(curPort.getName());
                window.soldadura.cboxPorts1.addItem(curPort.getName());
                 portMap.put(curPort.getName(), curPort);
            }
        }
    }

    public void iniciarPuerto(String puerto) {
        try {
            String selectedPort = puerto;
            selectedPortIdentifier = (CommPortIdentifier) portMap.get(selectedPort);
            nombre = "LPT1";
//            selectedPortIdentifier = CommPortIdentifier.getPortIdentifier(nombre);
            parallelPort = (ParallelPort) selectedPortIdentifier.open("Paralelo", 888);
            output = parallelPort.getOutputStream();
            window.ensayo.txtLog.append("Puerto " + nombre + " iniciado\n");
        } catch (PortInUseException | IOException ex) {
            window.ensayo.txtLog.append("\nError al iniciar el puerto " + nombre + ": " + ex.getMessage());
        }
    }

    public void cerrarPuerto() {
        try {
            output.close();
        } catch (Exception ex) {
            window.ensayo.txtLog.append("\nError al cerrar el puerto " + nombre + ": " + ex.getMessage());
        }
    }

    public void escribirEnPuerto(byte dato, String puerto) {
        try {
            iniciarPuerto(puerto);            
            output.write(dato);
            output.flush();
            cerrarPuerto();
        } catch (IOException ex) {
            window.ensayo.txtLog.append("\nError al escribir en el puerto " + nombre + ": " + ex.getMessage());
            System.err.println("\nError al escribir en el puerto " + nombre + ": " + ex.getMessage());
        }
    }
}